package com.xrit.sunnyday.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.xrit.sunnyday.constant.MessageConstant;
import com.xrit.sunnyday.entity.Result;
import com.xrit.sunnyday.utils.RedisMessageConstant;
import com.xrit.sunnyday.utils.SMSUtils;
import com.xrit.sunnyday.utils.ValidateCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;


@RestController
@RequestMapping("/validateCode")
public class ValidateCodeController {
    @Autowired
    private JedisPool jedisPool;
    /**
     * 发送手机验证码
     *
     * @param telephone
     * @return
     */
    @PostMapping("/send4Order")
    public Result send4Order(String telephone) {
//        生成验证码之前要检查一下是否发送过了, 通过redis获取key为手机号码，看是否存在
        Jedis jedis = jedisPool.getResource();
//        value对应的则是我们生成的验证码code
        String key = RedisMessageConstant.SENDTYPE_ORDER + "_" + telephone;
//        redis中的验证码
        String codeInRedis = jedis.get(key);
//        不存在，短信验证码没有发送，发送验证码
        if (null==codeInRedis){
//            随机生成一个6位数的验证码
            Integer code = ValidateCodeUtils.generateValidateCode(6);
//            腾讯云需要调用string[]来代替短信模板的参数
            String[] params = {code + ""};
            try {
//            调用SMSUtils发送短信验证码
                SMSUtils.sendSingleMessageForCode(telephone,params);
//            把短信验证码存入redis（5分钟有效），Value:短信验证码，key：电话号码
                jedis.setex(key,5*60,code+"");
//                返回成功
                System.out.println(code);
                return new Result(true,MessageConstant.SEND_VALIDATECODE_SUCCESS);
            } catch (Exception e) {
                e.printStackTrace();
//                返回失败
                return new Result(false,MessageConstant.SEND_VALIDATECODE_FAIL);
            }
        }
//        存在：验证码已经发送了，请注意查收
        return new Result(false, MessageConstant.SENT_VALIDATECODE);
    }
    @PostMapping("/send4Login")
    public Result send4Login(String telephone) {
//        生成验证码之前要检查一下是否发送过了, 通过redis获取key为手机号码，看是否存在
        Jedis jedis = jedisPool.getResource();
//        value对应的则是我们生成的验证码code
        String key = RedisMessageConstant.SENDTYPE_LOGIN + "_" + telephone;
//        redis中的验证码
        String codeInRedis = jedis.get(key);
//        不存在，短信验证码没有发送，发送验证码
        if (null==codeInRedis){
//            随机生成一个6位数的验证码
            Integer code = ValidateCodeUtils.generateValidateCode(6);
//            腾讯云需要调用string[]来代替短信模板的参数
            String[] params = {code + ""};
            try {
//            调用SMSUtils发送短信验证码
                SMSUtils.sendSingleMessageForCode(telephone,params);
//            把短信验证码存入redis（5分钟有效），Value:短信验证码，key：电话号码
                jedis.setex(key,5*60,code+"");
//                返回成功
                System.out.println(code);
                return new Result(true,MessageConstant.SEND_VALIDATECODE_SUCCESS);
            } catch (Exception e) {
                e.printStackTrace();
//                返回失败
                return new Result(false,MessageConstant.SEND_VALIDATECODE_FAIL);
            }
        }
//        存在：验证码已经发送了，请注意查收
        return new Result(false, MessageConstant.SENT_VALIDATECODE);
    }
}

